package com.mqtt.service;

import com.mqtt.model.DeviceInfo;
import com.mqtt.model.MqttMessage;

import java.util.List;
import java.util.Map;

/**
 * MQTT服务接口
 */
public interface MqttService {

    /**
     * 发送消息到设备
     */
    boolean sendToDevice(String deviceId, String message);

    /**
     * 发送消息到指定主题
     */
    boolean sendToTopic(String topic, String message);

    /**
     * 发送消息到指定主题（带QoS和retained）
     */
    boolean sendToTopic(String topic, String message, int qos, boolean retained);

    /**
     * 发送命令到设备
     */
    boolean sendCommand(String deviceId, String command, Map<String, Object> params);

    /**
     * 批量发送消息
     */
    void batchSend(List<MqttMessage> messages);

    /**
     * 订阅主题
     */
    void subscribe(String topic);

    /**
     * 订阅主题（指定QoS）
     */
    void subscribe(String topic, int qos);

    /**
     * 取消订阅
     */
    void unsubscribe(String topic);

    /**
     * 获取在线设备列表
     */
    List<DeviceInfo> getOnlineDevices();

    /**
     * 检查设备是否在线
     */
    boolean isDeviceOnline(String deviceId);

    /**
     * 获取设备信息
     */
    DeviceInfo getDeviceInfo(String deviceId);

    /**
     * 断开设备连接
     */
    void disconnectDevice(String deviceId);

    /**
     * 获取MQTT连接状态
     */
    boolean isConnected();

    /**
     * 重连MQTT
     */
    void reconnect();
}